home *** CD-ROM | disk | FTP | other *** search
Wrap
'* Setup script for ClarisWorks Application Installation '************************************************************************** '$DEFINE DEBUG ''Define for script development/debugging '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''Dialog ID's CONST WELCOME = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST CLARISPATH = 350 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST APPHELP = 900 CONST CUSTOM = 1000 CONST GETNAMEORGNUM = 1100 CONST TOOBIG = 6300 CONST BADPATH = 6400 ''Bitmap ID CONST LOGO = 1 GLOBAL DEST$ ''Default destination directory. GLOBAL CDEST$ ''Destination directory. GLOBAL CHECKIN$ ''Custom install checkboxes initially GLOBAL CHECKOUT$ ''Custom install checkboxes on termination GLOBAL CNAME$ ''Customer name GLOBAL CORG$ ''Customer organization GLOBAL CSERNUM$ ''Customer serial number GLOBAL PERS$ ''Personalization string GLOBAL CSTM% '' custom install flag GLOBAL CEXISTS% '' claris directory already exists GLOBAL HOWMUCH& '' space needed in works dir GLOBAL HOWMUCHC& '' space needed in claris dir DECLARE SUB Install DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION FixSlash (szName$) AS STRING INIT: CUIDLL$ = "mscuistf.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure SetBitmap CUIDLL$, LOGO SetTitle "Instalaci≤n de ClarisWorks" szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF" END IF ReadInfFile szInf$ '' initialize everything that needs it just once CSTM% = 0 CNAME$ = "" CORG$ = "" CSERNUM$ = "VΘase la tarjeta de registro" DEST$ = "C:\CLWORKS" WindowsDir$ = GetWindowsDir() ini$ = MakePath(WindowsDir$, "CLARIS.INI") CDEST$ = GetIniKeyString( ini$, "Claris", "Claris Directory" ) IF CDEST$ = "" THEN CEXISTS% = 0 CDEST$ = MakePath(WindowsDir$, "CLARIS") ELSE CEXISTS% = 1 END IF CHECKIN$ = "CheckItemsIn" CHECKOUT$ = "CheckItemsOut" FOR i% = 1 TO 6 STEP 1 AddListItem CHECKIN$, "OFF" NEXT i% FOR i% = 1 TO 6 STEP 1 AddListItem CHECKOUT$, "OFF" NEXT i% i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal WinDrive$ = MID$(GetWindowsDir, 1, 1) IF IsDriveValid(WinDrive$) = 0 THEN i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK) GOTO QUIT END IF WELCOME: sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$) IF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO WELCOME ELSE UIPop 1 IF sz$ = "CONTINUE" THEN '' this is a full install, so set all checkboxes on FOR i% = 1 TO 6 STEP 1 ReplaceListItem CHECKOUT$, i%, "ON" NEXT i% GOTO GETNAME END IF END IF CUSTOM: '' always set checkin to what is in checkout, as this may be from a BACK FOR i% = 1 TO 6 STEP 1 sz$ = GetListItem(CHECKOUT$, i%) ReplaceListItem CHECKIN$, i%, sz$ NEXT i% sz$ = UIStartDlg(CUIDLL$, CUSTOM, "FCheckDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN '' CHECKOUT$ does not need to be Got here, it is already updated UIPop 1 CSTM% = 1 GOTO GETNAME ELSEIF sz$ = "REACTIVATE" THEN GOTO CUSTOM ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO WELCOME ELSE GOSUB ASKQUIT GOTO CUSTOM END IF GETNAME: SetSymbolValue "NameIn", CNAME$ SetSymbolValue "OrgIn", CORG$ SetSymbolValue "NumIn", CSERNUM$ GETNAME1: sz$ = UIStartDlg(CUIDLL$, GETNAMEORGNUM, "FNameOrgNumDlgProc", APPHELP, HELPPROC$) CNAME$ = GetSymbolValue("NameOut") CORG$ = GetSymbolValue("OrgOut") CSERNUM$ = GetSymbolValue("NumOut") IF sz$ = "CONTINUE" THEN IF CNAME$ = "" THEN GOTO GETNAME END IF UIPop 1 GOTO GETPATH ELSEIF sz$ = "REACTIVATE" THEN GOTO GETNAME1 ELSEIF sz$ = "BACK" THEN UIPop 1 IF CSTM% = 1 THEN GOTO CUSTOM ELSE GOTO WELCOME END IF ELSE GOSUB ASKQUIT GOTO GETNAME END IF GETPATH: '' first, calculate how much space is needed for works directory HOWMUCH& = 1400000 '' base amount IF GetListItem(CHECKOUT$, 1) = "ON" THEN '' samples and tutorial HOWMUCH& = HOWMUCH& + 300000 END IF IF GetListItem(CHECKOUT$, 2) = "ON" THEN '' help HOWMUCH& = HOWMUCH& + 400000 END IF SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) DEST$ = GetSymbolValue("EditTextOut") IF sz$ = "CONTINUE" THEN DEST$ = FixSlash(DEST$) IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 drive1$ = MID$(DEST$, 1, 1) free& = GetFreeSpaceForDrive(drive1$) IF free& < HOWMUCH& THEN GOSUB TOOBIG GOTO GETPATHL1 END IF ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO GETNAME ELSE GOSUB ASKQUIT GOTO GETPATH END IF GETCPATH: '' first, calculate how much space is needed for claris directory HOWMUCHC& = 1120000 '' base amount IF GetListItem(CHECKOUT$, 3) = "ON" THEN '' word processing HOWMUCHC& = HOWMUCHC& + 320000 END IF IF GetListItem(CHECKOUT$, 4) = "ON" THEN '' excel HOWMUCHC& = HOWMUCHC& + 110000 END IF IF GetListItem(CHECKOUT$, 5) = "ON" THEN '' lotus HOWMUCHC& = HOWMUCHC& + 120000 END IF IF GetListItem(CHECKOUT$, 6) = "ON" THEN '' dbf HOWMUCHC& = HOWMUCHC& + 60000 END IF IF CSTM% = 0 THEN '' on full install, don't put up this dialog, but do check space GOTO ISSPACE END IF IF CEXISTS% = 1 THEN '' if claris dir exists, don't put up this dialog, but do check space GOTO ISSPACE END IF SetSymbolValue "EditTextIn", CDEST$ SetSymbolValue "EditFocus", "END" GETCPATHL1: sz$ = UIStartDlg(CUIDLL$, CLARISPATH, "FEditDlgProc", APPHELP, HELPPROC$) CDEST$ = GetSymbolValue("EditTextOut") IF sz$ = "CONTINUE" THEN CDEST$ = FixSlash(CDEST$) IF IsDirWritable(CDEST$) = 0 THEN GOSUB BADPATH GOTO GETCPATHL1 END IF UIPop 1 ISSPACE: drive2$ = MID$(CDEST$, 1, 1) free& = GetFreeSpaceForDrive(drive2$) IF drive2$ = drive1$ THEN free& = free& - HOWMUCH& END IF IF free& < HOWMUCHC& THEN GOSUB TOOBIG GOTO GETCPATHL1 END IF ELSEIF sz$ = "REACTIVATE" THEN GOTO GETCPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO GETPATH ELSE GOSUB ASKQUIT GOTO GETCPATH END IF DOIT: Install QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESS ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 i% = ExitExecRestart END ERRQUIT: i% = DoMsgBox("Algunos archivos del programa de instalación estaban corrompidos, llame al 212-561414 (EEUU) :-)", "Mensaje de instalación", MB_OK+MB_TASKMODAL+MB_ICONHAND) END TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO TOOBIG END IF UIPop 1 RETURN BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Builds the copy list and performs all installation operations. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB Install STATIC SrcDir$ = GetSymbolValue("STF_SRCDIR") CreateDir DEST$, cmoNone SampleDir$ = MakePath(DEST$, "MUESTRAS\") TutorialDir$ = MakePath(DEST$, "TUTORIAL\") WindowsDir$ = GetWindowsDir() SysDir$ = GetWindowsSysDir() ClarisDir$ = CDEST$ CreateDir ClarisDir$, cmoNone AddSectionFilesToCopyList "APPLICATION", SrcDir$, DEST$ wmv% = GetWindowsMinorVersion() IF wmv% = 0 THEN AddSectionKeyFileToCopyList "WINDEP", "FONTMAP30", SrcDir$, DEST$ ELSE AddSectionKeyFileToCopyList "WINDEP", "FONTMAP31", SrcDir$, DEST$ END IF IF GetListItem(CHECKOUT$, 1) = "ON" THEN CreateDir SampleDir$, cmoNone CreateDir TutorialDir$, cmoNone AddSectionFilesToCopyList "SAMPLES", SrcDir$, SampleDir$ AddSectionFilesToCopyList "TUTORIAL", SrcDir$, TutorialDir$ END IF IF GetListItem(CHECKOUT$, 2) = "ON" THEN AddSectionFilesToCopyList "HELP", SrcDir$, DEST$ END IF IF GetListItem(CHECKOUT$, 3) = "ON" THEN AddSectionFilesToCopyList "WP", SrcDir$, ClarisDir$ END IF IF GetListItem(CHECKOUT$, 4) = "ON" THEN AddSectionFilesToCopyList "EXCEL", SrcDir$, ClarisDir$ END IF IF GetListItem(CHECKOUT$, 5) = "ON" THEN AddSectionFilesToCopyList "LOTUS", SrcDir$, ClarisDir$ END IF IF GetListItem(CHECKOUT$, 6) = "ON" THEN AddSectionFilesToCopyList "DBF", SrcDir$, ClarisDir$ END IF AddSectionFilesToCopyList "CORE", SrcDir$, ClarisDir$ AddSectionFilesToCopyList "XTND", SrcDir$, ClarisDir$ AddSpecialFileToCopyList "REDIST", "COMMDLG", SrcDir$, SysDir$+"COMMDLG.DLL" AddSpecialFileToCopyList "REDIST", "SHELL", SrcDir$, SysDir$+"SHELL.DLL" AddSpecialFileToCopyList "REDIST", "VER", SrcDir$, SysDir$+"VER.DLL" AddSpecialFileToCopyList "REDIST", "TOOLHELP", SrcDir$, SysDir$+"TOOLHELP.DLL" AddSpecialFileToCopyList "REDIST", "HELPEXE", SrcDir$, WindowsDir$+"WINHELP.EXE" AddSpecialFileToCopyList "REDIST", "HELPHLP", SrcDir$, WindowsDir$+"WINHELP.HLP" CopyFilesInCopyList IF ERR <> 0 THEN RETURN END IF '' Files are on disk at this point, any more errors are ignored AddDos5Help "CLWORKS", "An integrated application for word processing, graphics,"+chr$(10)+" spread sheet, and database.", cmoNone '' Add personalization stuff to CLWORKS.EXE PERS$ = CNAME$ + Chr$(0) + CORG$ + Chr$(0) + CSERNUM$ + Chr$(0) StampResource "APPLICATION","THEAPP",DEST$,10,15,PERS$,LEN(PERS$) ini$ = MakePath(WindowsDir$, "CLARIS.INI") CreateIniKeyValue ini$, "Claris", "Claris Directory", CDEST$, cmoOverwrite CreateIniKeyValue ini$, "ClarisWorks", "Offscreen", "0" , cmoNone CreateIniKeyValue ini$, "ClarisWorks", "MainDictionary", ClarisDir$ + "\" +"NG.NDX", cmoOverwrite CreateIniKeyValue ini$, "ClarisWorks", "UserDictionary", ClarisDir$ + "\" + "USERD.SPL", cmoOverwrite '' CreateIniKeyValue ini$, "ClarisWorks", "Thesaurus", ClarisDir$ + "\" + "UTHES.MTH", cmoOverwrite CreateIniKeyValue ini$, "ClarisWorks", "Terminal", "TERMINAL.EXE" , cmoNone CreateIniKeyValue ini$, "ClarisWorks", "MaxFonts", "22", cmoNone CreateIniKeyValue ini$, "ClarisWorks", "FontCount", "0", cmoNone ini$ = MakePath(WindowsDir$, "WIN.INI") CreateIniKeyValue ini$, "Extensions", "cwk", DEST$ + "\CLWORKS.EXE ^.CWK", cmoOverwrite CreateIniKeyValue ini$, "Extensions", "cws", DEST$ + "\CLWORKS.EXE ^.CWS" , cmoOverwrite CreateIniKeyValue ini$, "Extensions", "mac", DEST$ + "\CLWORKS.EXE ^.MAC" , cmoOverwrite progrp$ = MakePath(WindowsDir$, "CLWORKS.GRP") isthere% = DoesFileExist(progrp$, femExists) RemoveFile progrp$, cmoNone CreateProgmanGroup "ClarisWorks", progrp$, cmoNone ShowProgmanGroup "ClarisWorks", 1, cmoNone AppPath$ = MakePath(DEST$,"CLWORKS.EXE") CreateProgmanItem "ClarisWorks", "ClarisWorks", AppPath$, "", cmoOverwrite IF isthere% = 0 THEN CreateProgmanItem "ClarisWorks", "LΘame", AppPath$+" "+MakePath(DEST$,"LΘame.cwk"), AppPath$+",1", cmoOverwrite ENDIF ERR = 0 END SUB '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION '** '** Purpose: '** Insert a \ after the drive if there is not one. '** Arguments: '** szName$ - full path name '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION FixSlash (szName$) STATIC AS STRING IF MID$(szName$,3,1) = "\" THEN FixSlash = szName$ ELSE FixSlash = MID$(szName$,1,2) + "\" + MID$(szName$,3,LEN(szName$)) END IF END FUNCTION